package com.lz.demo5;

import java.util.Random;
import java.util.Scanner;

/**
 * @ClassName TestStudent
 * @Description 测试
 * @Author 2214361854
 * @Date 2022/5/28 14:55
 * @Version 1.0
 */

//业务:输入学生的个人信息与各项成绩,随机生成学生的专业,并将输入的5个学生信息输出到控制台
public class TestStudent {
    public static void main(String[] args) {
        //25.创建一个长度为5的学生数组,用于存放学生对象
        Student[] stu = new Student[5];
        //26.循环5次,接收并打印学生的数据
        for (int i = 0; i < 5; i++) {
            //27.提示并接收学生的个人信息:姓名 性别
            System.out.println("请输入第" + (i + 1) + "个学生的个人信息:");
            System.out.println("姓名:");
            String name = new Scanner(System.in).nextLine();
            System.out.println("性别");
            char gender = new Scanner(System.in).nextLine().charAt(0);
            //28.提示并接收学生的成绩:
            System.out.println("请输入第" + (i + 1) + "个学生的成绩:");
            //29.成绩与专业是chooseMajor()执行的
            Major major = chooseMajor();
            //30.调用getScore()方法获取不同专业的学生的总成绩
            double score = major.getScore();
            //31.通过收集到的信息,利用学生类的全参构造创建学生对象,并将学生对象存入student数组中
            stu[i] = new Student(i + 1, name, gender, major, score);
            //32.打印当前存入的学生对象与学生对象的各项信息
            System.out.println(stu[i]);
        }
        //System.out.println(Arrays.toString(stu));//也可以循环结束整体打印数组中的所有元素
    }

    //本方法用于接收学生的各项成绩,并随机选择该学生的专业
    private static Major chooseMajor() {
        //1.提示并接收学生的各项成绩:
        System.out.println("请输入专业课成绩:");
        double ProfessionalScore = new Scanner(System.in).nextDouble();
        System.out.println("请输入英文课成绩:");
        double englishScore = new Scanner(System.in).nextDouble();
        System.out.println("请输入期中成绩:");
        double midScore = new Scanner(System.in).nextDouble();
        System.out.println("请输入期末成绩:");
        double finalScore = new Scanner(System.in).nextDouble();
        //2.创建引用类型变量major代表变量,局部变量手动赋予默认值null
        Major major = null;
        //3.生成随机数,随机数的取值:[0,3)->0,1,2
        int r = new Random().nextInt(3);
        //4.利用选择结构,根据生成的随机数不同,创建不同的专业对象
        switch (r) {
            case 0:
                major = new ComputerMajor(ProfessionalScore, englishScore, midScore, finalScore);
                break;
            case 1:
                major = new ChineseMajor(ProfessionalScore, englishScore, midScore, finalScore);
                break;
            case 2:
                major = new MathematicsMajor(ProfessionalScore, englishScore, midScore, finalScore);
                break;
            default:
        }
        //5.将创建好的专业对象返回
        return major;
    }
}
